package proyecto.ort.edu.uy.dominio;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "NOTAS")
@SequenceGenerator(name = "NOTA_SEQ", sequenceName = "NOTA_SEQ")
public class Nota implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -3665448244747881020L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "NOTA_SEQ")
	private Long idNota;

	private String descripcion;

	@Column(name = "fecha_Creacion")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fechaCreacion;

	@OneToMany
	@JoinTable(name = "NOTAS_NOTAS", joinColumns = @JoinColumn(name = "ID_NOTA"), inverseJoinColumns = @JoinColumn(name = "ID_NOTAHIJA"))
	private List<Nota> lstNotasHijas;

	@OneToOne()
	private Usuario autor;

	@OneToMany
	@JoinTable(name = "NOTAS_USUARIOS_REFENCIADOS", joinColumns = @JoinColumn(name = "ID_NOTA"), inverseJoinColumns = @JoinColumn(name = "ID_USUARIO"))
	private List<Usuario> lstUsuariosReferenciados;

	@OneToMany
	@JoinTable(name = "NOTAS_GRUPOUSUARIOS_REFENCIADOS", joinColumns = @JoinColumn(name = "ID_NOTA"), inverseJoinColumns = @JoinColumn(name = "ID_GRUPO_USUARIO"))
	private List<GrupoUsuario> lstGrupoUSuario;

	@OneToOne()
	private Tarea tarea;

	public Nota() {
		// TODO Auto-generated constructor stub
	}

	public Usuario getAutor() {
		return autor;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public Date getFechaCreacion() {
		return fechaCreacion;
	}

	public Long getIdNota() {
		return idNota;
	}

	public List<GrupoUsuario> getLstGrupoUSuario() {
		return lstGrupoUSuario;
	}

	public List<Usuario> getLstUsuariosReferenciados() {
		return lstUsuariosReferenciados;
	}

	/*
	 * public List<Nota> getLstNotasHijas() { return lstNotasHijas; }
	 * 
	 * public void setLstNotasHijas(List<Nota> lstNotasHijas) {
	 * this.lstNotasHijas = lstNotasHijas; }
	 */

	public Tarea getTarea() {
		return tarea;
	}

	public void setAutor(Usuario autor) {
		this.autor = autor;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public void setFechaCreacion(Date fechaCreacion) {
		this.fechaCreacion = fechaCreacion;
	}

	public void setIdNota(Long idNota) {
		this.idNota = idNota;
	}

	public void setLstGrupoUSuario(List<GrupoUsuario> lstGrupoUSuario) {
		this.lstGrupoUSuario = lstGrupoUSuario;
	}

	public void setLstUsuariosReferenciados(List<Usuario> lstUsuariosReferenciados) {
		this.lstUsuariosReferenciados = lstUsuariosReferenciados;
	}

	public void setTarea(Tarea tarea) {
		this.tarea = tarea;
	}

	public List<Nota> getLstNotasHijas() {
		return lstNotasHijas;
	}

	public void setLstNotasHijas(List<Nota> lstNotasHijas) {
		this.lstNotasHijas = lstNotasHijas;
	}

}
